package com.kordar.admin.kernel.thlibs;

import com.kordar.admin.kernel.util.SpringUtil;
import com.kordar.admin.modular.sys.service.setting.SettingProcessor;
import org.thymeleaf.context.ITemplateContext;
import org.thymeleaf.model.IModel;
import org.thymeleaf.model.IModelFactory;
import org.thymeleaf.model.IProcessableElementTag;
import org.thymeleaf.processor.element.AbstractElementTagProcessor;
import org.thymeleaf.processor.element.IElementTagStructureHandler;
import org.thymeleaf.templatemode.TemplateMode;

import java.util.HashMap;
import java.util.Map;

public class LayuiNavProcessor extends AbstractElementTagProcessor {

    private static final String TAG_NAME = "nav";
    private static final int PRECEDENCE = 10000;

    /*templateMode: 模板模式，这里使用HTML模板。
     dialectPrefix: 标签前缀。即xxx:text中的xxx。在此例子中prefix为thSys。
     elementName：匹配标签元素名。举例来说如果是div，则我们的自定义标签只能用在div标签中。为null能够匹配所有的标签。
     prefixElementName: 标签名是否要求前缀。
     attributeName: 自定义标签属性名。这里为text。
     prefixAttributeName：属性名是否要求前缀，如果为true，Thymeeleaf会要求使用text属性时必须加上前缀，即thSys:text。
     precedence：标签处理的优先级，此处使用和Thymeleaf标准方言相同的优先级。
     removeAttribute：标签处理后是否移除自定义属性。*/
    public LayuiNavProcessor(String dialectPrefix) {
        super(
                TemplateMode.HTML,
                dialectPrefix,
                TAG_NAME,
                true,
                null,
                false,
                PRECEDENCE);
    }

    @Override
    protected void doProcess(ITemplateContext iTemplateContext, IProcessableElementTag iProcessableElementTag, IElementTagStructureHandler iElementTagStructureHandler) {
        // 创建service类
        // MenuService menuService = SpringUtil.getBean(MenuService.class);

        int pos = Integer.parseInt(String.valueOf(iProcessableElementTag.getAttributeValue("pos")));
        String type = iProcessableElementTag.getAttributeValue("type");
        // 获取前端传递的值
        Map<String, String> options = new HashMap<>();
        options.put("layout", iProcessableElementTag.getAttributeValue("layout"));
        options.put("type", type);

        IModelFactory modelFactory = iTemplateContext.getModelFactory();
        IModel model = modelFactory.createModel();

        try {

            SettingProcessor processor = SpringUtil.getBean(SettingProcessor.class);
            model.add(modelFactory.createText(processor.output(pos, options)));

            /*if ("side".equals(type)) {
                List<MenuEntity> ll = menuService.list(new QueryWrapper<MenuEntity>()
                        .eq("type", MenuType.TYPE_CATEGORY.getCode())
                        .eq("active", CommonActive.OPEN.getCode())
                );
                for (MenuEntity entity : ll) {
                    options.put("navId", entity.getEvent());
                    model.add(modelFactory.createText(menuService.html(pos, entity.getId(), options)));
                }

            } else {
                model.add(modelFactory.createText(menuService.html(pos, options)));
            }*/


        } catch (Exception e) {
            e.printStackTrace();
            // System.out.println("=====================================");
        }

        iElementTagStructureHandler.replaceWith(model, false);
    }
}
